package CapaLogica;

import java.util.*;
import CapaAccesoBD.Conector;

public class MultiAdquisicion{
    /**
    * Inserta un registro de la adquisicion a la base de datos
    *
    * @param  pcodObra  codigo de obra
    * @param  pnomGal nombre de la galeria
    * @param  pcondicion condicion de la obra
    * @param  pcosto costo de la obra
    * @param  pfec_adqu fecha de aquisicion
    * @return   el objeto Adquiscion
    */
	public  Adquisicion crear(String pcodObra,String pnomGal,String pcondicion,String pcosto,String pfec_adqu) 
		throws Exception{
            
		Adquisicion adqui;
		String sql;
		sql = "INSERT INTO TAdquisicion "+
		"VALUES ('"+pcodObra+"', '"+pnomGal+"', '"+pcondicion+"', '"+pcosto+"', '"+pfec_adqu+"', "+false+");";
		try {
			Conector.getConector().ejecutarSQL(sql);
			adqui = new Adquisicion(pfec_adqu, pcondicion,pcosto,pcodObra,pnomGal,false);
		}
		catch (Exception e) {
			throw new Exception ("Ocurrio un error a la hora de registrar.");
		}
		return adqui;
	}

    /**
    * Actualiza un registro de la adquisicion a la base de datos
    *
    * @param  Adquisicion  objeto Aquisicion
    */
	public  void actualizar(Adquisicion adqui) throws 
			java.sql.SQLException,Exception{
		String sql;
		sql = "UPDATE TAdquision"+
		"SET cod_obra='"+adqui.getCodObra()+"' "+
                "nomGal='"+adqui.getNomGal()+"' "+
                "condicion_Adq='"+adqui.getCondicionAdquirida()+"' "+
                "costo_Adq='"+adqui.getCostoAdquisicion()+"' "+  
                "fecha_Adq='"+adqui.getFechaAdquisicion()+"' "+          
		"WHERE cod_obra='"+adqui.getCodObra()+"' and nomGal='"+adqui.getNomGal()+"';";
		try {
			Conector.getConector().ejecutarSQL(sql);
		}
		catch (Exception e) {
			throw new Exception ("La adquisicion no ha sido registrada");
		}
	}
    /**
    * Borra el registro de la adquisicion en la base de datos
    *
    * @param  Adquisicion  objeto Aquisicion
    */
	public  void borrar(Adquisicion adqui) throws 
			java.sql.SQLException,Exception{
		String sql;
		sql = "DELETE FROM TAdquisicion "+
		"WHERE cod_obra='"+adqui.getCodObra()+"' and nomGal='"+adqui.getNomGal()+"';";
		try {
			Conector.getConector().ejecutarSQL(sql);
		}
		catch (Exception e) {
			throw new Exception ("Ocurrio un error al eliminar la adquisicion.");
		}
	}
        
    /**
    * Busca obras adquiridas de una fecha especifica
    *
    * @param  pfechaAdq  fecha establecida
    * @return   ArrayList<Adquisicion>
    */
        public ArrayList<Adquisicion> buscarPorFecha(String pfechaAdq) throws Exception{
            Adquisicion objAdquisicion;
            ArrayList<Adquisicion> listaAdquisiciones;
            String sql;
            java.sql.ResultSet rs;
                sql = "SELECT cod_obra, nomGal, condicion_Adq, costo_Adq, fecha_Adq,ind_expuesta" + 
                  "FROM TAdquisicion " + 
                  "WHERE fecha_Adq like '"+pfechaAdq+"';";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaAdquisiciones = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objAdquisicion = new Adquisicion (("cod_obra"), rs.getString("nomGal"), rs.getString("condicion_Adq"),
                                rs.getString("costo_Adq"), rs.getString("fecha_Adq"),rs.getBoolean("ind_expuesta"));
                        listaAdquisiciones.add(objAdquisicion);
                        
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception ("No hay Adquisicions en esa fecha.");
            }
            rs.close();
            
            return listaAdquisiciones;
        }
    /**
    * Busca obras pertenecientes a una Galeria
    *
    * @param  pnomGal  nombre de la galeria
    * @return   ArrayList<Adquisicion>
    */ 
        public ArrayList<Adquisicion> buscarPorGaleria(String pnomGal) throws Exception{
            Adquisicion objAdquisicion;
            ArrayList<Adquisicion> listaAdquisiciones;
            String sql;
            java.sql.ResultSet rs;
                sql = "SELECT cod_obra, nomGal, condicion_Adq, costo_Adq, fecha_Adq,ind_expuesta" + 
                  " FROM TAdquisicion " + 
                  "WHERE nomGal like '"+pnomGal+"';";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaAdquisiciones = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objAdquisicion = new Adquisicion (rs.getString("fecha_Adq"), rs.getString("condicion_Adq"),
                                rs.getString("costo_Adq"), rs.getString("cod_obra"), rs.getString("nomGal"),rs.getBoolean("ind_expuesta"));
                        listaAdquisiciones.add(objAdquisicion);
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception ("No hay Adquisicions en esa fecha.");
            }
            rs.close();
            
            return listaAdquisiciones;
        }     
        
     /**
    * Busca obras pertenecientes a una Galeria
    *
    * @param  pnomGal  nombre de la galeria
    * @param pfechaDe feha inicial
    * @param pfechaHasta fecha final
    * @return   ArrayList<Adquisicion>
    */ 
     public ArrayList<Adquisicion> buscarPorGaleriaFechas(String pnomGal,String pfechaDe,String pfechaHasta) throws Exception{
            Adquisicion objAdquisicion;
            ArrayList<Adquisicion> listaAdquisiciones;
            String sql;
            java.sql.ResultSet rs;
                sql = "SELECT cod_obra, nomGal, condicion_Adq, costo_Adq, fecha_Adq,ind_expuesta" + 
                  " FROM TAdquisicion " + 
                  "WHERE nomGal like '"+pnomGal+"'and fecha_Adq between '"+pfechaDe+"' and '"+pfechaHasta+"';";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaAdquisiciones = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objAdquisicion = new Adquisicion (rs.getString("fecha_Adq"), rs.getString("condicion_Adq"),
                                rs.getString("costo_Adq"), rs.getString("cod_obra"), rs.getString("nomGal"),rs.getBoolean("ind_expuesta"));
                        listaAdquisiciones.add(objAdquisicion);
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception ("No hay Adquisicions en esa fecha.");
            }
            rs.close();
            
            return listaAdquisiciones;
        }
        
    /**
    * Busca una obra por su codigo
    *
    * @param  pcodObra  codigo de la obra
    * @return   Adquisicion
    */    
        public Adquisicion buscarPorCodigoObra(String pcodObra) throws Exception{
            Adquisicion objAdquisicion=null;
            String sql;
            java.sql.ResultSet rs;
            sql = "SELECT cod_obra, nomGal, condicion_Adq, costo_Adq, fecha_Adq,ind_expuesta" + 
                  " FROM TAdquisicion " + 
                  "WHERE cod_obra like '"+pcodObra+"';";
            try{

                rs = Conector.getConector().ejecutarSQL(sql,true);
                if(rs.next())
                    objAdquisicion = new Adquisicion (rs.getString("fecha_Adq"), rs.getString("condicion_Adq"), 
                            rs.getString("costo_Adq"), rs.getString("cod_obra"), rs.getString("nomGal"),rs.getBoolean("ind_expuesta"));
            }catch (Exception e){ 
                throw new Exception (e);
            }
            rs.close();
            
            return objAdquisicion;
        }  
        
        
    /**
    * Expone una obra
    *
    * @param  pindExpo  boolean exposicion
    * @param  idCodObra  codigo de la obra 
    */ 
     public  void expononerObra(Adquisicion adqui) throws 
			java.sql.SQLException,Exception{    
		String sql;
		sql = "UPDATE TAdquisicion "+
		"SET ind_expuesta="+adqui.isIndExpo()+
		" WHERE cod_obra='"+adqui.getCodObra()+"';";
		try {
			Conector.getConector().ejecutarSQL(sql);
		}
		catch (Exception e) {
			throw new Exception (e);
		}
                
	}
     
             public ArrayList<Obra> buscarPorNombre(String pnombre) throws Exception{
            Obra objObra;
            ArrayList<Obra> listaObras;
            String sql;
            java.sql.ResultSet rs;
				sql = "SELECT codigo, nombre, dimensiones,fechaRealizada, duracionDesarrollo, tecnica, estado, indFama, desHistorial, id_artista" + 
                  " FROM TObra " + 
                  "WHERE nombre like '%"+pnombre+"%';";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaObras = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objObra = new Obra (rs.getString("codigo"), rs.getString("nombre"), rs.getString("dimensiones"), rs.getString("fechaRealizada"), rs.getString("duracionDesarrollo"), rs.getString("tecnica"), rs.getString("estado"), rs.getBoolean("indFama"), rs.getString("desHistorial"), rs.getInt("id_artista"));
                        listaObras.add(objObra);
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception ("No hay Obras en esa fecha.");
            }
            rs.close();
            
            return listaObras;
        }
        
    /**
    * Busca coincidencias de obras por el nombreExacto
    *
    * @param  pnombre nombre de la obra
    * @return   ArrayList<Obra>
    */                   
     public ArrayList<Obra> buscarObrasPorGaleria(String pnombreGal) throws Exception{
            Obra objObra;
            ArrayList<Obra> listaObras;
            String sql;
            java.sql.ResultSet rs;
				sql = "SELECT a.codigo, a.nombre, a.dimensiones,a.fechaRealizada, a.duracionDesarrollo, a.tecnica, a.estado, a.indFama, a.desHistorial, a.id_artista" + 
                  " FROM TObra a, TAdquisicion b " + 
                  "WHERE a.codigo=b.cod_obra and b.nomGal ='"+pnombreGal+"';";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaObras = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objObra = new Obra (rs.getString("codigo"), rs.getString("nombre"), rs.getString("dimensiones"), rs.getString("fechaRealizada"), rs.getString("duracionDesarrollo"), rs.getString("tecnica"), rs.getString("estado"), rs.getBoolean("indFama"), rs.getString("desHistorial"), rs.getInt("id_artista"));
                        listaObras.add(objObra);
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception (e);
            }
            rs.close();
            
            return listaObras;
        }
        
}